package Offer.q09_CQueue;

import java.util.Deque;
import java.util.LinkedList;

public class CQueue {

    Deque<Integer> stack1;
    Deque<Integer> stack2;

    public CQueue() {
        stack1 = new LinkedList<>();
        stack2 = new LinkedList<>();
    }

    /**
     * 重要点：
     * 区分add和push再LinkedList中的作用
     * add是将元素加到list的尾部
     * 而push才是将元素加到list的头部（入栈）
     * 以上的说法仍然不准确，举例可以说明
     * 例如我们反复的使用add 加入1 2 3三个元素
     * 输出list时是 1 2 3
     * 而使用push则是 3 2 1，也就是把前一个元素压到后面去
     * 但是pop的时候统一是弹出来第一个元素（头部元素
     */
    public void appendTail(int value) {

        stack1.push(value);
    }

    public int deleteHead() {
        if (!stack2.isEmpty()) {
            return stack2.pop();
        }

        if (stack1.isEmpty()){
            return -1;
        }

        while (stack1.size() > 1){
            stack2.push(stack1.pop());
        }
        return stack1.pop();
    }

    public static void main(String[] args) {
        Deque<Integer> stack1 = new LinkedList<>();
        stack1.add(1);
        stack1.add(2);
        stack1.add(3);
        System.out.println(stack1);
        Deque<Integer> stack2 = new LinkedList<>();
        stack2.push(1);
        stack2.push(2);
        stack2.push(3);
        System.out.println(stack2);

//        System.out.println(stack1.pop());
//        System.out.println(stack2.pop());

        System.out.println(stack1.remove());
        System.out.println(stack2.remove());
        // 发现remove和pop在无参情况下相同
        // 而有参情况就是移除具体数值了

    }
}
